{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "b7430e96-56a5-4ea4-9d4f-7983b471b3c8",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "#This code is for regressing a state's votes-to-seats curve.  It's an offshoot of the Sep'23 ORC submission,\n",
    "# but simplified to only look at enacted maps, using RDH's precinct vote disaggregation\n",
    "# (I pre-combined RDH's 2016, 2018, 2020 and 2022 disaggregated votes into a master csv via Excel cut-paste\n",
    "#  (this code is combo of ORC_calc_expSeats and ORC_aggregn)\n",
    "\n",
    "# Code flow:\n",
    "# 1) Read in RDH's disaggregation of 2016-2022 votes to 2020 Census blocks\n",
    "# 2) Aggregate each of the 18 elections' Dem and GOP votes to 2020 Census vtd's\n",
    "# 3) Read in the 2020 vtdlists for each of the tract-centered Ohio Congressional Home Districts\n",
    "# 4) Sum up each Home District's Dem and GOP votes from 2020 vtd's to the full Home District for each election\n",
    "# 5) Apply a fractional seat uncertainty to each Home District in each election\n",
    "# 6) Fit the votes-to-seats to power law with seats bias: (S - SB)/(1 - (S - SB)) = (V/(1-V)) ^ h\n",
    "\n",
    "#from shapely.geometry import Point, LineString, Polygon, box\n",
    "#import shapely\n",
    "import geopandas as gpd\n",
    "import pandas as pd\n",
    "from scipy.optimize import minimize\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from scipy.stats import norm\n",
    "import math\n",
    "import ast\n",
    "def r3(input):\n",
    "    output = round(input,3)\n",
    "    return output\n",
    "def r5(input):\n",
    "    output = round(input,5)\n",
    "    return output\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "494596ea-22b8-44fb-b5ad-5828398953a6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "And now the 2016-2022 Census-block-disaggregated votes for statewide offices.\n"
     ]
    }
   ],
   "source": [
    "print(\"And now the 2016-2022 Census-block-disaggregated votes for statewide offices.\")\n",
    "voteFile = pd.read_csv(\"compiledOH_BAF.csv\")\n",
    "\n",
    "b20pName = voteFile['2020precinct']\n",
    "\n",
    "DemSen2016 = voteFile['G16USSDSTR']\n",
    "GOPSen2016 = voteFile['G16USSRPOR']\n",
    "DemPres2016 = voteFile['G16PREDCLI']\n",
    "GOPPres2016 = voteFile['G16PRERTRU']\n",
    "DemSen2018 = voteFile['G18USSDBRO']\n",
    "GOPSen2018 = voteFile['G18USSRREN']\n",
    "DemGov2018 = voteFile['G18GOVDCOR']\n",
    "GOPGov2018 = voteFile['G18GOVRDEW']\n",
    "DemSoS2018 = voteFile['G18SOSDCLY']\n",
    "GOPSoS2018 = voteFile['G18SOSRLAR']\n",
    "DemATG2018 = voteFile['G18ATGDDET']\n",
    "GOPATG2018 = voteFile['G18ATGRYOS']\n",
    "DemTre2018 = voteFile['G18TREDRIC']\n",
    "GOPTre2018 = voteFile['G18TRERSPR']\n",
    "DemAud2018 = voteFile['G18AUDDSPA']\n",
    "GOPAud2018 = voteFile['G18AUDRFAB']\n",
    "DemPres2020 = voteFile['G20PREDBID']\n",
    "GOPPres2020 = voteFile['G20PRERTRU']\n",
    "DemSen2022 = voteFile['G22USSDRYA']\n",
    "GOPSen2022 = voteFile['G22USSRVAN']\n",
    "DemGov2022 = voteFile['G22GOVDWHA']  \n",
    "GOPGov2022 = voteFile['G22GOVRDEW']\n",
    "DemSoS2022 = voteFile['G22SOSDCLA']\n",
    "GOPSoS2022 = voteFile['G22SOSRLAR']\n",
    "DemATG2022 = voteFile['G22ATGDCRO']\n",
    "GOPATG2022 = voteFile['G22ATGRYOS']\n",
    "DemTre2022 = voteFile['G22TREDSCH']\n",
    "GOPTre2022 = voteFile['G22TRERSPR']\n",
    "DemAud2022 = voteFile['G22AUDDSAP']\n",
    "GOPAud2022 = voteFile['G22AUDRFAB']\n",
    "DemCJu2022 = voteFile['G22CJUDBRU']\n",
    "GOPCJu2022 = voteFile['G22CJURKEN']\n",
    "DemJuA2022 = voteFile['G22JUSDJAM']\n",
    "GOPJuA2022 = voteFile['G22JUSRFIS']\n",
    "DemJuB2022 = voteFile['G22JUSDZAY']\n",
    "GOPJuB2022 = voteFile['G22JUSRDEW']\n",
    "\n",
    "nBlocks = len(GOPJuB2022)\n",
    "election = [\"Sen2016\", \"Pres2016\", \"Sen2018\", \"ATG2018\", \"Gov2018\", \"Tre2018\", \"SoS2018\", \"Aud2018\", \n",
    "           \"Pres2020\",             \"Sen2022\", \"ATG2022\", \"Gov2022\", \"Tre2022\", \"SoS2022\", \"Aud2022\",\n",
    "           \"CJu2022\", \"JuA2022\", \"JuB2022\"]  #augmented w 2022 here\n",
    "DemVotes = [DemSen2016, DemPres2016, DemSen2018, DemATG2018, DemGov2018, DemTre2018, DemSoS2018, DemAud2018,\n",
    "            DemPres2020,             DemSen2022, DemATG2022, DemGov2022, DemTre2022, DemSoS2022, DemAud2022,\n",
    "            DemCJu2022, DemJuA2022, DemJuB2022]\n",
    "GOPVotes = [GOPSen2016, GOPPres2016, GOPSen2018, GOPATG2018, GOPGov2018, GOPTre2018, GOPSoS2018, GOPAud2018,\n",
    "            GOPPres2020,             GOPSen2022, GOPATG2022, GOPGov2022, GOPTre2022, GOPSoS2022, GOPAud2022 ,\n",
    "            GOPCJu2022, GOPJuA2022, GOPJuB2022]\n",
    "electionYear = [\"2016\",\"2016\",\"2018\",\"2018\",\"2018\",\"2018\",\"2018\",\"2018\",\"2020\", \n",
    "                \"2022\",\"2022\",\"2022\",\"2022\",\"2022\",\"2022\",\"2022\",\"2022\",\"2022\" ]\n",
    "years = [\"2016\", \"2018\", \"2020\", \"2022\"]\n",
    "nElections = len(election)\n",
    "nYears = len(years)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "07dd3686-2c86-4728-8a4d-8c4613061c13",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "STEP 2: re-aggregate to 2020 census vtd's to enable neutral-map assessment\n",
      "  First, read in the 2020 Census vtds.  (a few min)\n",
      "I will assign each block a precinct number based on precinct row numbers in the 2020 VEST vtd-level election results file\n",
      "Then, create the dictionary from pl_2020 rows to vest_2020 rows\n",
      "Now, aggregate each election's partisan voters from 2020 blocks to 2020 pl_2020 rows\n",
      "working on block 0\n",
      "working on block 40000\n",
      "working on block 80000\n",
      "working on block 120000\n",
      "working on block 160000\n",
      "working on block 200000\n",
      "working on block 240000\n"
     ]
    }
   ],
   "source": [
    "print(\"STEP 2: re-aggregate to 2020 census vtd's to enable neutral-map assessment\")\n",
    "print(\"  First, read in the 2020 Census vtds.  (a few min)\")\n",
    "pl2020_vtdDF = gpd.read_file(\"../state_map_files/oh_pl2020_vtd.dbf\")\n",
    "pl2020_vtdGEOID20 = pl2020_vtdDF['GEOID20']\n",
    "pl2020pop = pl2020_vtdDF['P0010001']\n",
    "\n",
    "precinct2020File = gpd.read_file(\"../state_map_files/oh_vest_20.dbf\")\n",
    "pName20 = precinct2020File['GEOID20'].to_list()\n",
    "nPrecincts2020 = len(pName20)\n",
    "print(\"I will assign each block a precinct number based on precinct row numbers in the 2020 VEST vtd-level election results file\")\n",
    "block2020precinctNo = [pName20.index(b20pName[b]) for b in range(nBlocks)]\n",
    "\n",
    "pl2020_vtdNo = [i for i in range(nPrecincts2020)]\n",
    "vtdNoDF = pd.DataFrame( {\"pl2020_vtdNo\":pl2020_vtdNo, \"GEOID20\":pl2020_vtdGEOID20 } )\n",
    "vest20_GEOID20 = precinct2020File['GEOID20']\n",
    "print(\"Then, create the dictionary from pl_2020 rows to vest_2020 rows\")\n",
    "VESTvtdNo = [i for i in range(nPrecincts2020)]\n",
    "vestNoDF = pd.DataFrame( {\"VESTvtdNo\":VESTvtdNo,\"GEOID20\":vest20_GEOID20} )\n",
    "vtdLookupDF = pd.merge(vtdNoDF, vestNoDF,on=\"GEOID20\")  #this should set the vestNo for each pl2020_vtd row\n",
    "vestNo = vtdLookupDF['VESTvtdNo']  #for each pl2020_vtd, this points to the corresponding index in the vest20 list\n",
    "vestNo = vestNo.to_list()   #so we can call it later\n",
    "\n",
    "print(\"Now, aggregate each election's partisan voters from 2020 blocks to 2020 pl_2020 rows\")\n",
    "pl2020_DemVotes = [[0.]*nPrecincts2020 for e in range(nElections)]\n",
    "pl2020_GOPVotes = [[0.]*nPrecincts2020 for e in range(nElections)]\n",
    "for b in range(nBlocks):\n",
    "    if b%40000 == 0:\n",
    "        print(\"working on block\",b)\n",
    "    current_pl2020 = vestNo.index(block2020precinctNo[b])\n",
    "    for e in range(nElections):\n",
    "        pl2020_DemVotes[e][current_pl2020] += DemVotes[e][b]\n",
    "        pl2020_GOPVotes[e][current_pl2020] += GOPVotes[e][b]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "1fe633b6-c097-4c66-bf9a-45c9ae173fd4",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Now, aggregate each election's partisan voters from 2020 blocks to 2020 pl_2020 rows\n",
      "working on block 0\n",
      "working on block 40000\n",
      "working on block 80000\n",
      "working on block 120000\n",
      "working on block 160000\n",
      "working on block 200000\n",
      "working on block 240000\n",
      "Sen2016 has statewide vote 0.60963\n",
      "Pres2016 has statewide vote 0.54268\n",
      "Sen2018 has statewide vote 0.46593\n",
      "ATG2018 has statewide vote 0.52174\n",
      "Gov2018 has statewide vote 0.51925\n",
      "Tre2018 has statewide vote 0.5328\n",
      "SoS2018 has statewide vote 0.51901\n",
      "Aud2018 has statewide vote 0.51781\n",
      "Pres2020 has statewide vote 0.54077\n",
      "Sen2022 has statewide vote 0.53057\n",
      "ATG2022 has statewide vote 0.60129\n",
      "Gov2022 has statewide vote 0.62542\n",
      "Tre2022 has statewide vote 0.58553\n",
      "SoS2022 has statewide vote 0.59908\n",
      "Aud2022 has statewide vote 0.58749\n",
      "CJu2022 has statewide vote 0.56079\n",
      "JuA2022 has statewide vote 0.56907\n",
      "JuB2022 has statewide vote 0.56312\n"
     ]
    }
   ],
   "source": [
    "print(\"Now, aggregate each election's partisan voters from 2020 blocks to 2020 pl_2020 rows\")\n",
    "pl2020_DemVotes = [[0.]*nPrecincts2020 for e in range(nElections)]\n",
    "pl2020_GOPVotes = [[0.]*nPrecincts2020 for e in range(nElections)]\n",
    "for b in range(nBlocks):\n",
    "    if b%40000 == 0:\n",
    "        print(\"working on block\",b)\n",
    "    current_pl2020 = vestNo.index(block2020precinctNo[b])\n",
    "    for e in range(nElections):\n",
    "        pl2020_DemVotes[e][current_pl2020] += DemVotes[e][b]\n",
    "        pl2020_GOPVotes[e][current_pl2020] += GOPVotes[e][b]\n",
    "statewideGOP = [np.sum(pl2020_GOPVotes[e])/(np.sum(pl2020_GOPVotes[e]) + np.sum(pl2020_DemVotes[e])) for e in range(nElections) ]\n",
    "for e in range(nElections):\n",
    "    print(election[e], \"has statewide vote\", r5(statewideGOP[e]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "770a3748-0468-463b-b926-34ff2aca16b2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "We drew Home Districts based on 15 districts total.  Time to compute their leans using frac'l variation 0.04\n",
      "working on assigning Dems and Voters for election Sen2016\n",
      "working on assigning Dems and Voters for election Pres2016\n",
      "working on assigning Dems and Voters for election Sen2018\n",
      "working on assigning Dems and Voters for election ATG2018\n",
      "working on assigning Dems and Voters for election Gov2018\n",
      "working on assigning Dems and Voters for election Tre2018\n",
      "working on assigning Dems and Voters for election SoS2018\n",
      "working on assigning Dems and Voters for election Aud2018\n",
      "working on assigning Dems and Voters for election Pres2020\n",
      "working on assigning Dems and Voters for election Sen2022\n",
      "working on assigning Dems and Voters for election ATG2022\n",
      "working on assigning Dems and Voters for election Gov2022\n",
      "working on assigning Dems and Voters for election Tre2022\n",
      "working on assigning Dems and Voters for election SoS2022\n",
      "working on assigning Dems and Voters for election Aud2022\n",
      "working on assigning Dems and Voters for election CJu2022\n",
      "working on assigning Dems and Voters for election JuA2022\n",
      "working on assigning Dems and Voters for election JuB2022\n",
      "ready to compute seat splits for neutral-map ensemble OH15origHDvtd11Dec.csv\n",
      "for election Sen2016 with statewide GOP vote 0.60963 GOP favored to win 12.735 out of 15 seats = 0.84897 vs no-smear est 0.861\n",
      "for election Pres2016 with statewide GOP vote 0.54268 GOP favored to win 10.123 out of 15 seats = 0.67485 vs no-smear est 0.681\n",
      "for election Sen2018 with statewide GOP vote 0.46593 GOP favored to win 6.358 out of 15 seats = 0.42385 vs no-smear est 0.416\n",
      "for election ATG2018 with statewide GOP vote 0.52174 GOP favored to win 9.232 out of 15 seats = 0.6155 vs no-smear est 0.622\n",
      "for election Gov2018 with statewide GOP vote 0.51925 GOP favored to win 9.092 out of 15 seats = 0.60614 vs no-smear est 0.615\n",
      "for election Tre2018 with statewide GOP vote 0.5328 GOP favored to win 9.877 out of 15 seats = 0.65845 vs no-smear est 0.672\n",
      "for election SoS2018 with statewide GOP vote 0.51901 GOP favored to win 9.176 out of 15 seats = 0.61173 vs no-smear est 0.62\n",
      "for election Aud2018 with statewide GOP vote 0.51781 GOP favored to win 9.077 out of 15 seats = 0.60512 vs no-smear est 0.617\n",
      "for election Pres2020 with statewide GOP vote 0.54077 GOP favored to win 9.875 out of 15 seats = 0.6583 vs no-smear est 0.667\n",
      "for election Sen2022 with statewide GOP vote 0.53057 GOP favored to win 9.378 out of 15 seats = 0.62518 vs no-smear est 0.622\n",
      "for election ATG2022 with statewide GOP vote 0.60129 GOP favored to win 12.032 out of 15 seats = 0.80216 vs no-smear est 0.811\n",
      "for election Gov2022 with statewide GOP vote 0.62542 GOP favored to win 12.712 out of 15 seats = 0.84745 vs no-smear est 0.859\n",
      "for election Tre2022 with statewide GOP vote 0.58553 GOP favored to win 11.591 out of 15 seats = 0.7727 vs no-smear est 0.786\n",
      "for election SoS2022 with statewide GOP vote 0.59908 GOP favored to win 12.011 out of 15 seats = 0.80073 vs no-smear est 0.81\n",
      "for election Aud2022 with statewide GOP vote 0.58749 GOP favored to win 11.63 out of 15 seats = 0.77531 vs no-smear est 0.786\n",
      "for election CJu2022 with statewide GOP vote 0.56079 GOP favored to win 10.614 out of 15 seats = 0.70763 vs no-smear est 0.719\n",
      "for election JuA2022 with statewide GOP vote 0.56907 GOP favored to win 10.934 out of 15 seats = 0.72892 vs no-smear est 0.746\n",
      "for election JuB2022 with statewide GOP vote 0.56312 GOP favored to win 10.69 out of 15 seats = 0.71269 vs no-smear est 0.727\n",
      "statewide vote, GOP expected seats at seatVar= 0.04\n",
      "0.60963 0.84897 Sen2016\n",
      "0.54268 0.67485 Pres2016\n",
      "0.46593 0.42385 Sen2018\n",
      "0.52174 0.6155 ATG2018\n",
      "0.51925 0.60614 Gov2018\n",
      "0.5328 0.65845 Tre2018\n",
      "0.51901 0.61173 SoS2018\n",
      "0.51781 0.60512 Aud2018\n",
      "0.54077 0.6583 Pres2020\n",
      "0.53057 0.62518 Sen2022\n",
      "0.60129 0.80216 ATG2022\n",
      "0.62542 0.84745 Gov2022\n",
      "0.58553 0.7727 Tre2022\n",
      "0.59908 0.80073 SoS2022\n",
      "0.58749 0.77531 Aud2022\n",
      "0.56079 0.70763 CJu2022\n",
      "0.56907 0.72892 JuA2022\n",
      "0.56312 0.71269 JuB2022\n"
     ]
    }
   ],
   "source": [
    "#Step 3 -- read in the OH Congressional Home District vtd lists\n",
    "nDistricts = 15 \n",
    "infilename = \"OH15origHDvtd11Dec.csv\"\n",
    "analysisDF = pd.read_csv(\"../state_HD_output/\"+infilename)\n",
    "HDpop = analysisDF['HDtractPop']\n",
    "totTractPop = np.sum(HDpop)\n",
    "HDwt = [float(nDistricts)*HDpop[t]/totTractPop for t in range(len(HDpop)) ]\n",
    "nHDs = len(HDwt)\n",
    "vtdListString = analysisDF['HDtractList']\n",
    "vtdList = [ast.literal_eval(vtdListString[t]) for t in range(nHDs) ]\n",
    "\n",
    "seatVar = 0.04  #fractional seat variance to smear out close elections\n",
    "print(\"We drew Home Districts based on\",nDistricts,\"districts total.  Time to compute their leans using frac'l variation\",seatVar)\n",
    "districtVoters = [[0.]*nHDs for e in range(nElections)]\n",
    "districtDems = [[0.]*nHDs for e in range(nElections)]\n",
    "\n",
    "#Step 4 - compute each HD's mean lean, assign its fractional seat and add to the running Dem total\n",
    "for e in range(nElections):\n",
    "    print(\"working on assigning Dems and Voters for election\",election[e])\n",
    "    y = years.index(electionYear[e])\n",
    "    for dNo in range(nHDs):\n",
    "        for v in vtdList[dNo]:\n",
    "            districtDems[e][dNo] += pl2020_DemVotes[e][v]\n",
    "            districtVoters[e][dNo] += pl2020_GOPVotes[e][v] + pl2020_DemVotes[e][v]\n",
    "\n",
    "fracDemVotes = [0.]*nElections\n",
    "DemDistricts = [0.]*nElections\n",
    "fracDemDistricts = [0.]*nElections\n",
    "districtDemLean = [[0.]*nHDs for e in range(nElections)]\n",
    "simpleFracDemDistricts = [0.]*nElections  #fraction of seats won by Dems with no seatVar smear\n",
    "print(\"ready to compute seat splits for neutral-map ensemble\",infilename)\n",
    "for e in range(nElections):\n",
    "    for dNo in range(nHDs):\n",
    "        if districtVoters[e][dNo] > 0:  #some blank rows in ensemble\n",
    "            districtDemLean[e][dNo] = districtDems[e][dNo] / districtVoters[e][dNo]\n",
    "        if districtDemLean[e][dNo] > 0.5:\n",
    "            simpleFracDemDistricts[e] += HDwt[dNo]/float(nDistricts)\n",
    "        nSD = (districtDemLean[e][dNo] - 0.5 )/seatVar  #number of std deviations for Dem vote relative to tossup\n",
    "        DemDistricts[e] += HDwt[dNo] * norm.cdf(nSD)   #computation of fractional seats.  Again, we factor in ensemble weight of this district\n",
    "    fracDemDistricts[e] = DemDistricts[e]/float(nDistricts)\n",
    "    fracDemVote = np.sum(pl2020_DemVotes[e]) / float(np.sum(districtVoters[e]) )\n",
    "    fracDemVotes[e] = fracDemVote\n",
    "    print(\"for election\",election[e],\"with statewide GOP vote\",r5(statewideGOP[e]),\"GOP favored to win\",r3(nDistricts - DemDistricts[e]),\n",
    "          \"out of\", nDistricts,\"seats =\",r5(1. - fracDemDistricts[e]),\"vs no-smear est\",r3(1. - simpleFracDemDistricts[e]) )\n",
    "    \n",
    "print(\"statewide vote, GOP expected seats at seatVar=\",seatVar)\n",
    "for e in range(nElections):\n",
    "    print(r5(statewideGOP[e]), r5(1.-fracDemDistricts[e]),election[e])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "2cc82d45-0697-471c-934d-bc72b3e30a78",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Here is a less busy version of the nonlinear plot for HD paper number 1\n",
      "Analysis repeated using nonlinear votes-to-seats: seats ratio = bias + votesRatio ** exponent\n",
      "I will now compute the POWER-LAW responsiveness of the seats in elections 1 to 18 and the fit GOP seats at GOPVote = 0.55\n",
      "For this plan, the GOP most likely wins 0.68582 at the meanGOPVote of 0.55 Resp= 2.74591\n",
      "the fit values of power-law exponent and seats bias are 3.44721 0.04247\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#Step 6 - fit votes to seats across all elections to power-law + bias model\n",
    "print(\"Here is a less busy version of the nonlinear plot for HD paper number 1\")\n",
    "print(\"Analysis repeated using nonlinear votes-to-seats: seats ratio = bias + votesRatio ** exponent\")\n",
    "\n",
    "offsetX = [0.,  0.023, 0.015,  0.01, -0.002, -0.007, -0.02, -0.02, 0.014, 0.007, 0., -0.003, 0., 0., 0.,0.,0.,0.]  #plot prettiness parameters\n",
    "offsetY = [0.015, 0, 0.00, -0.01, 0.015, 0.008, 0.005, -0.005,  -0.009,  -0.025, 0., -0.025, 0., 0., 0.,0.,0.,0.]\n",
    "CLR = [\"orange\", \"green\", \"red\", \"green\", \"black\", \"red\", \"black\", \"tan\", [0.1,0.4,1], \"blue\",\"blue\",\"blue\",\"blue\",\"blue\",\"blue\",\n",
    "      \"blue\",\"blue\",\"blue\"]\n",
    "nPlotVotes = 13 #arbitrary number of votes-seats pairs to plot our nonlinear fit model\n",
    "\n",
    "def votes2Seats(PARAMS, VOTES):\n",
    "    EXPONENT, BIAS = PARAMS[0], PARAMS[1]\n",
    "    NROWS = len(VOTES)\n",
    "    SEATSRATIO = [BIAS + (VOTES[r]/(1.-VOTES[r]))**EXPONENT  for r in range(NROWS) ]\n",
    "    calcSEATS = [SEATSRATIO[r] / (SEATSRATIO[r]+1.)          for r in range(NROWS) ]\n",
    "    return calcSEATS\n",
    "\n",
    "\n",
    "def votes2SeatsError(PARAMS, VOTES, SEATS ):\n",
    "    \"\"\"\n",
    "    This function calculates the mean-squared-error for fitting a power-law votes-to-seats curve with geography bias\n",
    "    S / (1-S) = bias + (V/(1-V))^exponent, mostly consistent with HD paper#1's fit to 22 populous state's Congressional S(V)\n",
    "    VOTES and SEATS are passed arrays of statewide vote and seat fractions.\n",
    "    EXP is the guessed power-law exponent; seatsBIAS is the guessed seats bias, passed in as 2-D array\n",
    "    This function is the kernel of an external minimize function to optimize EXP and SEATSBIAS values\n",
    "    \"\"\"\n",
    "    EXP, seatsBIAS = PARAMS[0], PARAMS[1]\n",
    "    NROWS = len(VOTES)\n",
    "    predictedSeats = votes2Seats(PARAMS, VOTES)\n",
    "    rowSquareError = [(predictedSeats[r] - SEATS[r])**2  for r in range(NROWS)]\n",
    "    totalError = np.sum(rowSquareError)\n",
    "    return totalError\n",
    "\n",
    "#fracGOPVotes = [ 1. - fracDemVotes[e] for e in range(nElections)]\n",
    "fracGOPDistricts = [ 1. - fracDemDistricts[e] for e in range(nElections)]\n",
    "meanGOPVote = 0.55  #this value centers the graph, does not influence the fit\n",
    "\n",
    "nSkipStart, nSkipEnd = 0, 0\n",
    "electionRange = [e for e in range(nSkipStart,nElections-nSkipEnd,1)]  #first block -- use ALL elections \n",
    "minV, maxV = np.min(statewideGOP[nSkipStart:nElections-nSkipEnd]), np.max(statewideGOP[nSkipStart:nElections-nSkipEnd])\n",
    "plotVotes = [minV + i* (maxV-minV)/(nPlotVotes - 1.) for i in range(nPlotVotes) ]\n",
    "print(\"I will now compute the POWER-LAW responsiveness of the seats in elections\",1+nSkipStart,\"to\",nElections-nSkipEnd,\n",
    "      \"and the fit GOP seats at GOPVote =\",r5(meanGOPVote))\n",
    "\n",
    "guessedExponent, guessedSeatsBias = 2.5, 0.05  #initial guess between legislative and Congrl expectations\n",
    "VOTES, SEATS = statewideGOP[nSkipStart:nElections-nSkipEnd],fracGOPDistricts[nSkipStart:nElections-nSkipEnd]\n",
    "#converting to votes2seats_simplefit nomenclature\n",
    "\n",
    "root = minimize(votes2SeatsError,[guessedExponent, guessedSeatsBias],args=(VOTES, SEATS))\n",
    "estmdResp = root.x[0]\n",
    "estmdSeatsRatioBias = root.x[1]\n",
    "estmdSeatsBias = (1. + estmdSeatsRatioBias)/(2. + estmdSeatsRatioBias) - 0.5\n",
    "fitSeats = votes2Seats([estmdResp, estmdSeatsRatioBias], plotVotes)\n",
    "#now compute the local derivative to report a responsiveness\n",
    "avgVote = meanGOPVote\n",
    "dx = 0.001*(np.max(VOTES) - np.min(VOTES))\n",
    "nearAvgSeats = votes2Seats([estmdResp, estmdSeatsRatioBias],[avgVote-dx, avgVote, avgVote+dx] )\n",
    "fracLikelySeats = nearAvgSeats[1]\n",
    "localSlope = (nearAvgSeats[2] - nearAvgSeats[0]) / (2.*dx)\n",
    "dx2 = 0.25*(np.max(VOTES) - np.min(VOTES) )\n",
    "linearAvgVote = [avgVote - dx2, avgVote + dx2 ]\n",
    "linearSeats = [nearAvgSeats[1] - dx2 *localSlope, nearAvgSeats[1]+ dx2*localSlope ]\n",
    "Rsmeared = localSlope\n",
    "print(\"For this plan, the GOP most likely wins\",r5(fracLikelySeats),\"at the meanGOPVote of\",r5(meanGOPVote),\n",
    "      \"Resp=\",r5(Rsmeared))\n",
    "print(\"the fit values of power-law exponent and seats bias are\",r5(estmdResp),r5(estmdSeatsBias) )\n",
    "\n",
    "for e in range(nElections):\n",
    "    if e in [0,2,8,9,11]:\n",
    "        plt.scatter(statewideGOP[e], fracGOPDistricts[e],marker = \"x\",s=120,color=\"purple\")\n",
    "        plt.text(statewideGOP[e]+offsetX[e], fracGOPDistricts[e]+offsetY[e],election[e],ha='center',fontsize=10, color=\"purple\")\n",
    "    else:\n",
    "        plt.scatter(statewideGOP[e], fracGOPDistricts[e],marker = \"x\",s=120,color=\"black\")\n",
    "        \n",
    "#plt.text(avgVote,0.02+nearAvgSeats[1], \"R = \"+str(r3(Rsmeared)),rotation = 36.,fontsize=12 )\n",
    "plt.text(0.5,0.48+estmdSeatsBias, \"h = \"+str(r3(estmdResp)),rotation = 36.,fontsize=12,ha=\"center\" )\n",
    "plt.plot(plotVotes, fitSeats, label=\"fit\")\n",
    "#plt.plot(linearAvgVote, linearSeats, ls = '--', label=\"linear\")\n",
    "plt.plot([0.497,0.503],[0.5,0.5],color=\"black\",lw=0.5)\n",
    "plt.arrow(0.5,0.5,0,0.9*estmdSeatsBias,width=0.0004,head_width=0.003)\n",
    "plt.text(0.502, 0.5+0.3*estmdSeatsBias,\"SB=\"+str(r3(estmdSeatsBias)),fontsize=12 )\n",
    "plt.xlabel(\"statewide GOP vote\")\n",
    "plt.ylabel(\"GOP fraction of expected seats\")\n",
    "plt.rc('axes', labelsize=15)\n",
    "plt.yticks(fontsize=15)\n",
    "plt.xticks(fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "766ade7a-ad2f-4f85-9e3e-93599022cbb9",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "419572cc-f64c-4d36-a368-474a742bb016",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
